package Package.SpecialActionFlow.SerialVersionUIDAndTransient;

import javax.print.StreamPrintServiceFactory;
import java.io.*;

public class SerialVersionUIDAndTransient {

    public static final void SerialVersionUIDAndTransient() throws IOException, ClassNotFoundException {
//        serialVersionUID
//        用对象序列化流序列化了一个对象后，假如我们修改了对象所属的类文件，读取数据会不会出问题呢？
//        会出问题，会抛出InvalidClassException异常
//        如果出问题了，如何解决呢？
//        重新序列化
//                给对象所属的类加一个serialVersionUID
//        private static final long serialVersionUID = 42L;
//        transient
//        如果一个对象中的某个成员变量的值不想被序列化，又该如何实现呢？
//        给该成员变量加transient关键字修饰，该关键字标记的成员变量不参与序列化过程
//        序列化id不匹配时可以声明一个显示的is值
        write();
        read();

    }
    //反序列化
    private static void read() throws IOException, ClassNotFoundException, IOException {
        ObjectInputStream ois = new ObjectInputStream(new
                FileInputStream("D:\\insert\\oos.java"));
        Object obj = ois.readObject();
        Student s = (Student) obj;
        System.out.println(s.getName() + "," + s.getAge());
        ois.close();
    }
    //序列化
    private static void write() throws IOException {
        ObjectOutputStream oos = new ObjectOutputStream(new
                FileOutputStream("D:\\insert\\oos.java"));
        Student s = new Student("林青霞", 30);
        oos.writeObject(s);
        oos.close();
    }
}
